'''
（1）求1+2+3+4+..+m。
（2）判断m是否是素数。
（3）判断m是否是完数，若是完数则输出其所有的因子。

要求：
	从键盘输入n，调用上述三个函数完成功能。
1)1+2+..+n的结果。
2)n以内所有素数，以字典形式显示，如：{2:"是"，3："是"，4："否"，5："是"，6："否"}。
3)n以内所有完数。以字典形式显示，如：{6：{1，2，3},…… }。
'''


def AddToX(x):
    if x == 1:
        return 1
    return x + AddToX(x - 1)


def isPrime(x):
    return not [y for y in range(2, x) if x % y == 0]


def isWanShu(x):
    list1 = []
    for i in range(1, x):
        if x % i == 0:
            list1.append(i)
    sum_list = sum(list1)
    return ((True if sum_list == x else False), list1)


'''    
    if sum_list == x:
        return (True, list1)
    else:
        return (False, list1)
'''

# 注意python 默认递归深度为1000
n = int(input("请输入一个整数n:"))

print("1+...+%d的结果是%d " % (n, AddToX(n)))

dict1 = {}
for i in range(2, n + 1):
    if isPrime(i):
        dict1[i] = "是"
    else:
        dict1[i] = "否"
print("%d以内所有素数：" % (n))
print(dict1)

dict2 = {}
list1 = []
for i in range(2, n + 1):
    tuple1 = isWanShu(i)
    if tuple1[0]:
        # dict2[i] = list1  有问题，传的是地址，会更改里面的元素
        dict2[i] = tuple1[1]

print("%d以内所有完数:" % (n))
print(dict2)
